#include <iostream>
#include <jsoncpp/json/json.h>
#include "../comm/util.hpp"
#include <httplib.h>
#include "compile_run.hpp"

using namespace NS_CompileAndRun;
using namespace httplib;

void Usage(const std::string proc)
{
    std::cerr << "Usage:\n\t" << proc << " port" << std::endl;
    exit(-1);
}

// 编译服务模块对外只提供服务功能
// 客户端通过HTTP协议向编译服务上传一个json串，编译模块发送回一个json串
int main(int argc, char* argv[])
{
    if (argc != 2)
        Usage(argv[0]);

    Server svr;
    // 用来基本测试
    svr.Get("/hello", [](const Request& req, Response& rsp)
        {
            rsp.set_content("hello httplib, 你好网络库", "text/pain; charset=utf-8");
        }
    );

    // 提供编译运行服务
    svr.Post("/compile_and_run", [](const Request& req, Response& rsp)
        {
            std::string in_json = req.body;
            std::cout << in_json << std::endl;
            std::string out_json;
            if (!in_json.empty())
            {
                CompileAndRun::Start(in_json, &out_json);
                rsp.set_content(out_json, "application/json; charset=utf-8");
                std::cout << out_json << std::endl;
            }
        }
    );

    svr.listen("0.0.0.0", atoi(argv[1])); // 启动http服务

    return 0;
}

// int main()
// {
//     std::string in_json;
//     std::string out_json;
//
//     Json::Value in_value;
//     in_value["code"] = R"(#include <iostream>
// int main()
// {
//     std::cout << "hello world" << std::endl;
//     // int* p = new int[1024*1024*1024];
//     // while (1);
//     // int a = 1 / 0;
//     // aaa
//     return 0;
// })";
//     in_value["input"] = "";
//     in_value["cpu_lim"] = 1;
//     in_value["mem_lim"] = 1024 * 30;
//
//     Json::StyledWriter writer;
//     in_json = writer.write(in_value);
//     std::cout << in_json << std::endl;
//     CompileAndRun::Start(in_json, &out_json);
//     std::cout << out_json << std::endl;
//
//     return 0;
// }
